package org.infosec.lc.exercises.checkFile;

import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
import java.io.IOException;

import org.springside.modules.security.utils.DigestUtils;

/**
	文件名：CheckFile.java
	作  者：林超
	时  间：2011-7-15下午03:45:45

	功能描述：检查文件或文件夹是否存在
		File类的常见方法。
		    1，创建。
		        boolean createNewFile():创建文件。
		        boolean mkdir():创建文件夹。
		        boolean mkdirs():创建多级目录。
		 
		    2，删除。
		        boolean delete():
		        deleteOnExit();
		 
		    3，判断。
		        isAbsolute()：是否是绝对路径。
		        exists():是否存在。
		        isDirectory()：是否是文件夹。
		        isFile():是否为文件。
		    4，获取。
		        long length():文件大小。
		        getName() // 文件名
		        getParent()  //  父目录， 如果封装File对象时，不指定路径， 返回 null
		        getPath()    //路径  封装什么路径就是什么路径
		        getAbsolutePath() 绝对路径。 //无论封装什么路径，获取的都是绝对路径。
		        
		        String[] list():获取指定目录下当前的文件夹和文件名称。
		        File[] listFiles():获取指定目录下当前的文件夹和文件对象。
		        static File[] listRoots():获取本机有效盘符。
		        String[] list(FilenameFilter ):获取指定过滤器过滤后的文件或者文件夹名称
		        File[] listFiles(FileFilter ):获取指定过滤器过滤后的文件或者文件夹对象
		 
		    5，renameTo：对文件进行改名。还可以剪切。
		 
		    6，compareTo();  //File实现了Compareable接口。 文件可以排序。
	
	pom.xml	:
			
 */
public class CheckFile {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		//获得当前目标
		String path = System.getProperty("user.dir");
		try {
			methodOne(path);
			methodTwo(path);	
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 读出当前目录下所有文件和文件夹，并通过文件过滤
	 * @param path
	 */
	private static void methodTwo(String path) {
		File dirF = new File(path);
		
		//文件过滤
		File[] fileFilterList = dirF.listFiles(new FileFilter(){
			public boolean accept(File pathname) {
				//是文件夹并且名称为"log"
				return pathname.isDirectory()&& pathname.getName().toLowerCase().equals("log");
			}
		});
		
		for(File file:fileFilterList){
			System.out.println(file.getName());
		}
		
		//文件名过滤
		File[] filenameFilterList = dirF.listFiles(new FilenameFilter(){
			public boolean accept(File dir, String name) {
				//是文件夹并且名称为"log"
				return dir.isDirectory()&& name.equals("log");
			}
		});
		
		for(File file:filenameFilterList){
			System.out.println(file.getName());
		}
	}

	/**
	 * 通过自己构建File对象来判断
	 * @param path
	 * @throws IOException
	 */
	private static void methodOne(String path) throws IOException {
		File dirF = new File(path+"/log");
		
		System.out.println("文件夹是否存在：" + dirF.exists());
		if(!dirF.exists()){	//如果不存在
			
//			dirF.createNewFile(); //创建文件
			dirF.mkdir();	//创建文件夹
//			dirF.mkdirs();	//创建多级目录
			
		}else{	//如果存在
			
			System.out.println("是否是文件夹：" + dirF.isDirectory()); //是否是文件夹
			System.out.println("是否是文件：" + dirF.isFile()); //是否是文件
			System.out.println("是否隐藏文件：" + dirF.isHidden()); //是否隐藏文件
			System.out.println("是否是绝对路径：" + dirF.isAbsolute()); //是否是绝对路径
		}
	}

}

